<?php
namespace User\Controller;
use Think\Controller;
/**
 * author:haiqin
 * time:20200914 
 * desc:暂时没有
 */
class ApiController extends Controller{

    public function edit(){
        $m = D('Users');
        $m->edit_user($_POST);
    }

    /**
     * 2023.06.07 huhaiqin
     * 用户登录接口
     */
    public function login_xy(){
        $m = D('Users','Service');
        $m->_login($_REQUEST['username'],$_REQUEST['password'],$_REQUEST['backto']);
    }

    /**
     * 2023.06.07 huhaiqin
     * 登出
     */
    public function logout_xy(){
        unset($_SESSION['loginUser']);
        _apiReturn(1,'success');
    }

	/**
     * 2023.06.12  xqx
     * 注册
     */
	public function reg_xy() {
		$m = D('Users','Service');
		$m->_reg($_REQUEST['username'],$_REQUEST['email'],$_REQUEST['password'],$_REQUEST['code']);
	}

    /**
     * 2023.06.13  xqx
     * 通过邮箱验证码登录
     */
    public function login_by_code(){
        $m = D('Users','Service');
        $m->_login_by_code($_REQUEST['email'],$_REQUEST['code']);
    }

    /**
     * 2022.05.31 huhaiqin
     * app端的登录
     */
    public function login_app(){
        $m = D('Users');
        $m->login($_REQUEST,'app'); 
    }

    /**
     * 20201108登录接口，存储session为loginUser
     */
    public function login(){
        if($_REQUEST['code'] == ''){
            _apiReturn(0,'请先完成人机验证~');
        }else{
            $codeSession = session('loginCodeSession');
            if(!$codeSession){
                _apiReturn(0,'code非法~');
            }
            if($codeSession['time'] + 30 * 60 < time()){
                _apiReturn(0,'code超时~');
            }
            if($codeSession['code'] != $_REQUEST['code']){
                _apiReturn(0,'人机验证失败~');
            }
            session('loginCodeSession',null);//销毁session
        }
        $m = D('Users');
        $m->login($_REQUEST);
    }

    /**
     * 登出
     */
    public function logout(){
        unset($_SESSION['loginUser']);
        redirect('/');
    }

    /**
     * 注册
     */
    public function reg(){
        //需要首先检测code是否正确
        if (!$_REQUEST['mobile']) {
            _apiReturn(0, '手机号码不能为空~');
        }
        if (!check_phone($_REQUEST['mobile'])) {
            _apiReturn(0, '手机号码格式不正确~');
        }
        if (!$_REQUEST['code']) {
            _apiReturn(0, '验证码不能为空~');
        }
        $sms = D('Sms');
        $check = $sms->_check($_REQUEST['mobile'], $_REQUEST['code']); //检测验证码是否正确
        if($check){
            $m = D('Users');
            $m->reg($_REQUEST); //注册
        }else{
            _apiReturn(0,'验证码错误');
        }
    }

    /**
     * 2023.05.09 xuqixiang
     * app端的注册接口
     */
    public function reg_app(){
        if(trim($_REQUEST['email']) == ''){
            _apiReturn(0,'邮箱不能为空~');
        }
        if(trim($_REQUEST['username']) == ''){
            _apiReturn(0,'用户名不能为空~');
        }
        if(trim($_REQUEST['password']) == ''){
            _apiReturn(0,'密码不能为空~');
        }
        
        $m = D('Users');
        $m->reg($_REQUEST,'app');
        // _apiReturn(1,'success');
    }


    /**
     * 20201123，hhq，简化code生成方式，适用于本地
     * 生成登录时候的验证码
     */
    public function create_login_code(){
        // $m->_create($_REQUEST['token'], $_REQUEST['token_time']);
        $ret = check_token($_REQUEST['token'],$_REQUEST['token_time']);
        if($ret[0] == 0){
            $code = create_token();
            session('loginCodeSession',['code' => $code, 'time' => time()]); //保存session
            _apiReturn(1,'success',$code);
        }else{
            _apiReturn(0,$ret[1]);
        }
    }

    /**
     * 20201124,haiqin,前端重置密码
     */
    // public function repwd(){
    //     if(!$_REQUEST['password']){
    //         _apiReturn(0,'密码不能为空~');
    //     }
    //     if(strlen($_REQUEST['password']) < 8 || strlen($_REQUEST['password']) > 30 ){
    //         _apiReturn(0,'密码长度为8到30位~');
    //     }
    //     if (!$_REQUEST['mobile']) {
    //         _apiReturn(0, '手机号码不能为空~');
    //     }
    //     if (!check_phone($_REQUEST['mobile'])) {
    //         _apiReturn(0, '手机号码格式不正确~');
    //     }
    //     if (!$_REQUEST['code']) {
    //         _apiReturn(0, '验证码不能为空~');
    //     }
    //     $sms = D('Sms');
    //     $check = $sms->_check($_REQUEST['mobile'], $_REQUEST['code']);
    //     if($check){
    //         $m = D('Users');
    //         $m->resetpwd_by_mobile($_REQUEST['mobile'],$_REQUEST['password']);
    //     }else{
    //         _apiReturn(0,'验证码错误~');
    //     }
    // }

    /**
     * haiqin,20201124,管理用户列表接口
     */
    public function getdata($role = 'admin'){
        //如果api_table = 0,则表示正常的_apiReturn接口
        if ($_REQUEST['api_table'] == '' || $_REQUEST['api_table'] != 0) {
            C('api_table', true); //标注是apitable的接口返回
        }
        $user = get_user(I('uid'));
        if ($user['role'] != 'admin') {
            _apiReturn(0, '您没有权限获取该数据~');
        }
        $p = I('page') ? I('page') : 1;
        $row = I('limit') ? I('limit') : 10;
        $query = ' AND A.role = "'.$role.'"';
        if (I('searchtype') && I('keywords')) {
            $query .= ' AND '.I('searchtype').' like "%'.I('keywords').'%"';
        }
        if (I('role_type') != '') {
            $query .= ' AND A.role_type = '.I('role_type');
        }
        if (I('status')) {
            $query .= ' AND A.status = '.I('status');
        }
        $m = D('Users');
        $data = $m->_query($p, $row, $query);
        _apiReturn(1, 'success', $data);
    }

    /**
     * 获取管理员接口
     */
    public function getdata_admin(){
        $this->getdata('admin');
    }

    /**
     * 获取教师列表
     */
    public function getdata_base(){
        $this->getdata('base');
    }

    /**
     * 获取扫码登录用户
     */
    public function get_user(){
        $scene = $_REQUEST['scene_id'];
        $unid = $_REQUEST['unid'];
        // dump(S("scene_".$scene));
        // dump(S('scene_'.$unid.'_'.$scene));
        if(S("scene_".$scene) && S('scene_'.$unid.'_'.$scene)){
            if($_SESSION['loginUser']){
                _apiReturn(1, 'success', '');
            }else{
                $map['scene'] = $scene;
                $loginUser = D('Users')->where($map)->find();
                if($loginUser){
                    unset($loginUser['password']);
                    $_SESSION['loginUser'] = $loginUser;
                    _apiReturn(1, 'success', '');
                }
            }
        }else{
            _apiReturn(2, 'success', '二维码已过期');
        }
    }

    /**
     * 2023.06.13  xqx
     * 前端用户修改/重置密码
     */
    public function repwd(){
        if(!$_SESSION['loginUser']){
            _apiReturn(0,'非法操作～');
        }
        
        $m = D('Users','Service');
        $m->_repwd($_REQUEST['oldpwd'], $_REQUEST['newpwd'], $_REQUEST['repwd'], $_SESSION['loginUser']['id'],$_REQUEST['op'] ? $_REQUEST['op'] : '');
    }

     /**
     * 删除用户
     */
    public function del(){
        $m = D('Users');
        $m->_del(I('ids'));
    }

    /**
     * 根据用户ID快速登录
     * uid,type
     */
    public function quick_login(){
        if(!$_REQUEST['uid']){
            _apiReturn(0,'用户ID不能为空~');
        }
        if($_REQUEST['type'] != 'wechat'){
            _apiReturn(0,'不支持快速登录~');
        }
        $uid = $_REQUEST['uid'];
        $data = D('Users')->find($uid);
        if(!$data){
            _apiReturn(0,'用户不存在~');
        }else{
            _apiReturn(1,'success',$data); //登录成功，返回用户信息
        }
    }

    /**
     * 上传base64图片
     */
    public function upload_avatar_base64(){

        $imgbase64 = $_POST['image'];
        $config = C('UPLOAD');
        //图片上传
        if (preg_match('/^(data:\s*image\/(\w+);base64,)/',$imgbase64,$result)){
            $type = $result[2];//图片后缀
            $new_file = $config['rootPath'].'avatar/';
            $url= $config['rootPathBase'].'avatar/';

            if (!file_exists($new_file)) {
                //检查是否有该文件夹，如果没有就创建，并给予最高权限
                mkdir($new_file, 0777,true);
            }

            $filename = uniqid() . ".{$type}"; //文件名
            $new_file = $new_file . $filename;
            $url = $url.$filename;
            //写入操作

            if(file_put_contents($new_file, base64_decode(str_replace($result[1], '', $imgbase64)))) {
                //图片上传成功
                $m = D('Users');
                $m->_change_avatar($_POST['uid'] ? $_POST['uid'] : 0, $url);
            }else{
                _apiReturn(0,'图片上传失败~');
            }
        }else{
            _apiReturn(0,'只支持base64图片上传');
        }
    }

    /**
     * 2022.05.31 huhaiqin
     * 更新用户一些基础信息
     */
    public function update_user(){
        $m = D('Users');
        $m->_update_user_base($_REQUEST);
    }

    /**
     * 2023.05.15  xqx
     * app端修改密码
     */
    public function repwd_from_app(){
        $m = D('Users');
        $m->_repwd_from_app($_REQUEST);
    }

    /**
     * 2023.05.14  xqx
     * 保存反馈信息
     */
    public function feedback(){
        $m = D('Feedback');
        $m->_add($_REQUEST);
    }

}